home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / ifupdown / upgrade-from-hotplug.pl < prev   
Perl Script  |  2009-09-22  |  1KB  |  80 lines

  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4.  
  5. my %doneifaces = ();
  6. my @orig = ();   # original interfaces file
  7. my $line;
  8.  
  9. while($line = <STDIN>) {
  10.     if ($line =~ m/^\s*#/) {
  11.         push @orig, $line;
  12.         next;
  13.     }
  14.  
  15.     my $tmp;
  16.     while ($line =~ m/\\\n$/ and $tmp = <>) {
  17.         $line .= $tmp;
  18.     }
  19.     push @orig, $line;
  20. }
  21.  
  22. my @autos = ();
  23. sub upgrade
  24. {
  25.     my $block = shift;
  26.     $block =~ s/^(\s*)//s;
  27.     my $pre = $1;
  28.  
  29.     $block =~ s/(\s*)$//s;
  30.     my $post = $1;
  31.     $post = $1 . $post while $block =~ s/(\s*\n\#[^\n]*)$//s;
  32.  
  33.     my $out = "";
  34.     if ($block =~ m/^mapping\s+hotplug\b/) {
  35.         while ($block =~ m/^\s*map\s+(\S+)/mg) {
  36.             unless (grep { $_ eq $1 } @autos) {
  37.                 $out .= "auto $1\n";
  38.                 push @autos, $1;
  39.             }
  40.         }
  41.         $out =~ s/\n$//;
  42.     } elsif ($block =~ m/^auto\b/) {
  43.         $block =~ s/^auto\b//;
  44.         $pre .= "auto";
  45.     
  46.         while ($block =~ m/\s*(\S+)/sg) {
  47.             unless (grep { $_ eq $1 } @autos) {
  48.                 $out .= " $1";
  49.                 push @autos, $1;
  50.             }
  51.         }
  52.  
  53.         return "" unless length $out;
  54.     } else {
  55.         $out = $block;
  56.     }
  57.  
  58.     return $pre . $out . $post;
  59. }
  60.  
  61. my $out = "";
  62. my $block = "";
  63. for my $x (@orig) {
  64.     my $y = $x;
  65.     $y =~ s/^\s*//s;
  66.     $y =~ s/\\\n//sg;
  67.     $y =~ s/\s*$//s;
  68.  
  69.     if ($y =~ m/^(iface|auto|allow-\W+|mapping)\b/) {
  70.         $out .= upgrade $block;
  71.         $block = $x;
  72.     } else {
  73.         $block .= $x;
  74.     }
  75. }
  76.  
  77. $out .= upgrade $block;
  78.  
  79. print $out;
  80.